package com.sit.estatemanagementserver.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.nio.file.Path;
import java.nio.file.Paths;

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    // 同样，从配置文件注入上传目录的路径
    @Value("${image.path}")
    private String uploadDir;

    /**
     * 这个方法是用来配置静态资源处理的。
     * 简单说，就是告诉 Spring Boot，当一个 URL 请求过来时，应该去硬盘的哪个位置找对应的文件。
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 将字符串路径转换为 Path 对象，再获取其绝对路径
        Path uploadPath = Paths.get(uploadDir);
        String absolutePath = uploadPath.toFile().getAbsolutePath();

        // 关键的一行配置！
        // .addResourceHandler("/files/**")：定义了 URL 的匹配规则。
        //   所有以 "/files/" 开头的请求，比如 "/files/image1.jpg"，都会被这个处理器拦截。
        // .addResourceLocations("file:" + absolutePath + "/")：定义了文件在硬盘上的位置。
        //   "file:" 前缀是必须的，它告诉 Spring 这是本地文件系统路径。
        //   例如，如果 absolutePath 是 "/home/user/project/uploads"，
        //   那么当请求 "/files/cat.jpg" 时，Spring Boot 会去 "/home/user/project/uploads/cat.jpg" 找这个文件。
        registry.addResourceHandler("/image/**")
                .addResourceLocations("file:" + absolutePath + "/");
    }
}